<?php
//static静态简例
//注：static是关键字,不是访问控制修饰符
class Demo{
	public static $str_static = "静态属性<br>";
	public $str_public = "公共属性<br>";
	const STR_CONST = "STR_CONST常量<br>";
	static function func_static(){					//::方式调用						//->方式调用
		echo "func_static方法<br>";
		// echo self::$str_static;						//可以调用						//可以调用
		// echo self::$str_public;						//不可以调用					//不可以调用
		// echo self::STR_CONST;						//可以调用					//可以调用
		// echo static::$str_static;						//可以调用					//不可以调用
		// echo static::STR_CONST;						//可以调用					//不可以调用
		
		// self::func_static2();						//可以调用					//可以调用
		// self::func_public2();					//能调出来，但是会报弃用错			//能调出来，但是会报弃用错
		// $this->func_static();						//不能使用$this				//不能使用$this
		// $this->func_public();						//不能使用$this				//不能使用$this
		// echo $this->STR_CONST;						//不能使用$this				//不能使用$this
	}
	function func_public(){							//::方式调用						//->方式调用
		echo "func_public方法<br>";
		// echo self::$str_static;						//可以调用					//可以调用
		// echo self::$str_public;						//不可以调用					//不可以调用
		// echo self::STR_CONST;						//可以调用					//可以调用
		// var_dump($this->str_static);						//不能使用$this				//能调用出来，不报错，打印NULL
		// echo $this->str_public;						//不能使用$this				//可以调用
		
		// echo static::$str_static;						//可以调用					//不可以调用
		// echo static::STR_CONST;						//可以调用					//不可以调用
		
		// self::func_static();						//可以调用						//可以调用
		// self::func_public2();							//可以调用					//可以调用
		// $this->func_static();						//不能使用$this				//可以调用
		// $this->func_public2();						//不能使用$this				//可以调用
		// var_dump($this->STR_CONST);						//不能使用$this				//能调用出来，不报错，打印NULL
	}
	static function func_static2(){
		echo "func_static2方法<br>";
	}
	function func_public2(){
		echo "func_public2方法<br>";
	}
}
// echo Demo::$str_static;		//能正常调用
// echo Demo::$str_public;		//不能正常调用，因为不是静态的属性
// echo Demo::STR_CONST;		//能正常调用
// Demo::func_static();		//能正常调用，不用new就能调用类里面的静态方法
// Demo::func_public();		//能调出来，但是会报弃用错

$ob=new Demo;
// var_dump($ob->str_static);//不能调用出来，但不报错，打印NULL
// var_dump($ob->STR_CONST);//不能调用出来，但不报错，打印NULL
// echo $ob->str_public;//能调用出来
// $ob->func_static();//能调用出来，箭头方式，可以调用静态方法
$ob->func_public();//能调用出来

// echo '<br>总结：1、静态的方法里不能用$this,也不能调用非静态的属性方法';
// echo '<br>2、非静态的方法里能用$this,也能用self::，<br>并且静态的、非静态的属性和方法都有办法能调用';
// echo '<br>3、self::可以调用普通属性，但是会报弃用。';